#include "Moto.h"

void mover_moto(int x_actual, int y_actual, int ultimo_mov, int id){
    
    
    //semilla del random
    srand((unsigned)time(0) * id);
    //probabilidad de que intente el ultimo movimiento
    int prob = rand() % 10;
    int r_mov;
    if (prob >= 0 && prob <= 5) {
        r_mov = ultimo_mov;
    } else {
        //movimiento random 
        r_mov = rand() % 4;
        
        switch (r_mov) {
            case 0:
                r_mov = ARRIBA;
                break;
            case 1:
                r_mov = ABAJO;
                break;
            case 2:
                r_mov = DERECHA;
                break;
            case 3:
                r_mov = IZQUIERDA;
                break;                                
        }
    }
    
    //chequea movimiento, si es valido mueve, sino sigue buscando alternativas mas abajo...
    if (checkea(r_mov, x_actual, y_actual)) {
        actualizar_matriz(x_actual, y_actual, id);
        motoArray[id].posX = x_actual;
        motoArray[id].posY = y_actual;
        ultimo_mov = r_mov;         
    } else {
        mov_invalido = r_mov;
        r_mov = -1; 
    }
    //...aca es mas abajo jeje
    if(r_mov==-1)
    {
     if(mov_invalido == ARRIBA)
     {
        r_mov = rand()%2;
        if(r_mov == 0)
        {
           if(checkea(IZQUIERDA,x_actual,y_actual))
           {
             actualizar_matriz(x_actual,y_actual,id);//pista->matriz[x_actual][y_actual] = id;
             motoArray[id].posX=x_actual;
             motoArray[id].posY=y_actual;
             ultimo_mov = IZQUIERDA;                                        
           }
           else
           {
             if(checkea(DERECHA,x_actual,y_actual))
             {
                actualizar_matriz(x_actual,y_actual,id);
                motoArray[id].posX=x_actual;
                motoArray[id].posY=y_actual;
                ultimo_mov = DERECHA;                                  
             }
             else
             {
                motoArray[id].estado=0; 
             }
           }
       }
       else if(r_mov == 1)
       {
               
           if(checkea(DERECHA,x_actual,y_actual))
           {
              actualizar_matriz(x_actual,y_actual,id);
              motoArray[id].posX=x_actual;
              motoArray[id].posY=y_actual;  
              ultimo_mov = DERECHA;                                  
           }
           else
           {
              if(checkea(IZQUIERDA,x_actual,y_actual))
              {
                actualizar_matriz(x_actual,y_actual,id);
                motoArray[id].posX=x_actual;
                motoArray[id].posY=y_actual;
                ultimo_mov = IZQUIERDA;                                  
              }
              else
              {
                motoArray[id].estado=0;
              }
           }
       }
    
     }
     else if(mov_invalido == ABAJO)
     {
          r_mov = rand()%2;
          if(r_mov == 0)
          {
               
            if(checkea(DERECHA,x_actual,y_actual))
            {
              actualizar_matriz(x_actual,y_actual,id);
              motoArray[id].posX=x_actual;
              motoArray[id].posY=y_actual;
              ultimo_mov = DERECHA;                                     
            }
            else
            {
              if(checkea(IZQUIERDA,x_actual,y_actual))
              {
                actualizar_matriz(x_actual,y_actual,id);
                motoArray[id].posX=x_actual;
                motoArray[id].posY=y_actual;
                ultimo_mov = IZQUIERDA;                                  
              }
              else
              {
                motoArray[id].estado=0; 
              }
            }
          }
          else if(r_mov == 1)
          {
            
             if(checkea(IZQUIERDA,x_actual,y_actual))
             {
                actualizar_matriz(x_actual,y_actual,id);
                motoArray[id].posX=x_actual;
                motoArray[id].posY=y_actual;
                ultimo_mov = IZQUIERDA;                                    
             }
             else
             {
                if(checkea(DERECHA,x_actual,y_actual))
                {
                   actualizar_matriz(x_actual,y_actual,id);
                   motoArray[id].posX=x_actual;
                   motoArray[id].posY=y_actual;
                   ultimo_mov = DERECHA;                                 
                }
                else
                {
                   motoArray[id].estado=0; 
                }
             }
          }
          
    
     }
     else if (mov_invalido == DERECHA)
     {
          r_mov = rand() % 2;
          if (r_mov == 0)
          {  
            if (checkea(ARRIBA, x_actual, y_actual))
            {
              actualizar_matriz(x_actual, y_actual, id);
              motoArray[id].posX = x_actual;
              motoArray[id].posY = y_actual;
              ultimo_mov = ARRIBA;                                      
            }
            else
            {
              if (checkea(ABAJO, x_actual, y_actual))
              {
                 actualizar_matriz(x_actual, y_actual, id);
                 motoArray[id].posX = x_actual;
                 motoArray[id].posY = y_actual;
                 ultimo_mov = ABAJO;                                 
              }
              else
              {
                motoArray[id].estado=0; 
              }
            }
          }
          else if (r_mov == 1)
          {
            if (checkea(ABAJO, x_actual, y_actual))
            {
              actualizar_matriz(x_actual, y_actual, id);
              motoArray[id].posX = x_actual;
              motoArray[id].posY = y_actual;
              ultimo_mov = ABAJO;                                      
            }
            else
            {
                if (checkea(ARRIBA, x_actual, y_actual))
                {
                  actualizar_matriz(x_actual, y_actual, id);
                  motoArray[id].posX = x_actual;
                  motoArray[id].posY = y_actual;
                  ultimo_mov = ARRIBA;                                    
                }
                else
                {
                   motoArray[id].estado=0; 
                }
            }
          }
    
     }
     else if (mov_invalido == IZQUIERDA)
     {
          r_mov = rand() % 2;
          if (r_mov == 0)
          {
            
            if(checkea(ABAJO,x_actual,y_actual))
            {
               actualizar_matriz(x_actual, y_actual, id);
               motoArray[id].posX = x_actual;
               motoArray[id].posY = y_actual;
               ultimo_mov = ABAJO;                                     
            }
            else
            {
                if (checkea(ARRIBA, x_actual, y_actual))
                {
                  actualizar_matriz(x_actual, y_actual, id);
                  motoArray[id].posX = x_actual;
                  motoArray[id].posY = y_actual;
                  ultimo_mov = ARRIBA;                                    
                }
                else
                {
                   motoArray[id].estado = 0; 
                }
            }
          }
          else if(r_mov == 1)
          {
               
             if(checkea(ARRIBA, x_actual, y_actual))
            {
                actualizar_matriz(x_actual, y_actual, id);
                motoArray[id].posX = x_actual;
                motoArray[id].posY = y_actual;
                ultimo_mov = ARRIBA;                                    
            }
            else
            {
                if(checkea(ABAJO,x_actual,y_actual))
                {
                   actualizar_matriz(x_actual, y_actual, id);
                   motoArray[id].posX = x_actual;
                   motoArray[id].posY = y_actual;
                   ultimo_mov = ABAJO;                                 
                }
                else
                {
                   motoArray[id].estado=0; 
                }
            }
          }
     }
    } 

     
}
